// 简单图片压缩工具，适配 mp-weixin 等平台
// 使用 uni.compressImage 按质量压缩，失败时返回原路径

export function compressImagePath(filePath, options = {}) {
	const { quality = 50, targetSizeMB = 0.5 } = options;
	const ONE_MB = 1024 * 1024;
	const targetSizeBytes = targetSizeMB * ONE_MB;

	return new Promise((resolve) => {
		// 首先获取文件信息，检查大小
		try {
			uni.getFileInfo({
				filePath,
				success: (fileInfo) => {
					const fileSizeBytes = fileInfo.size;

					// 如果文件小于目标大小（0.5MB），直接返回原文件
					if (fileSizeBytes <= targetSizeBytes) {
						resolve(filePath);
						return;
					}

					// 根据文件大小动态调整压缩质量
					// 文件越大，压缩质量越低，以确保压缩后接近0.5MB
					let adaptiveQuality = quality;
					if (fileSizeBytes > 5 * ONE_MB) {
						// 大于5MB的超大图片，质量降低到10%
						adaptiveQuality = 10;
						console.log('压缩超大图片，质量降低到10%');
					} else if (fileSizeBytes > 2 * ONE_MB) {
						// 2-5MB之间的图片，质量降低到20%
						adaptiveQuality = 20;
						console.log('压缩2-5MB图片，质量降低到20%');
					} else if (fileSizeBytes > ONE_MB) {
						// 1-2MB之间的图片，质量降低到30%
						adaptiveQuality = 30;
						console.log('压缩1-2MB图片，质量降低到30%');
					} else if (fileSizeBytes > targetSizeBytes) {
						// 0.5-1MB之间的图片，使用稍高的压缩质量
						adaptiveQuality = Math.max(45, quality + 5);
						console.log('压缩0.5-1MB图片，质量降低到45%');
					}

					// 进行压缩
					uni.compressImage({
						src: filePath,
						quality: adaptiveQuality,
						success: (res) => {
							if (res && res.tempFilePath) {
								resolve(res.tempFilePath);
							} else if (res && res.tempFiles && res.tempFiles[0] && res.tempFiles[0].path) {
								resolve(res.tempFiles[0].path);
							} else {
								resolve(filePath);
							}
						},
						fail: () => resolve(filePath)
					});
				},
				// 获取文件信息失败时，回退到原始压缩逻辑
				fail: () => {
					try {
						uni.compressImage({
							src: filePath,
							quality,
							success: (res) => {
								if (res && res.tempFilePath) {
									resolve(res.tempFilePath);
								} else if (res && res.tempFiles && res.tempFiles[0] && res.tempFiles[0].path) {
									resolve(res.tempFiles[0].path);
								} else {
									resolve(filePath);
								}
							},
							fail: () => resolve(filePath)
						});
					} catch (e) {
						resolve(filePath);
					}
				}
			});
		} catch (e) {
			// 任何异常都返回原文件路径
			resolve(filePath);
		}
	});
}

// 批量压缩 chooseImage 返回的 tempFiles 数组映射的 { name, uri }
export async function compressFilesForUpload(files, options = {}) {
	if (!Array.isArray(files) || files.length === 0) return [];
	// 直接传递所有选项，包括quality和新的targetSizeMB
	const results = [];
	for (const file of files) {
		const src = file.uri || file.path || file.filePath || file;
		const compressed = await compressImagePath(src, options);
		results.push({
			name: file.name || 'file',
			uri: compressed
		});
	}
	return results;
}


